package service

import (
	"errors"
	"gorm.io/gorm"
	"month/videosvr/internal/models"
)

// CreateVideo todo 笔记发布
func CreateVideo(video models.Video) (*gorm.DB, models.Video, error) {
	tx := models.DB.Begin()
	err := models.InitMysql(func(DB *gorm.DB) error {
		return DB.Create(&video).Error
	})
	return tx, video, err
}

// DelVideo todo 删除
func DelVideo(id int) error {
	return models.InitMysql(func(DB *gorm.DB) error {
		return DB.Model(&models.Video{}).Delete("id=?", id).Error
	})
}

// UpdateVideo todo 修改笔记权限
func UpdateVideo(id int, status int) error {
	return models.InitMysql(func(DB *gorm.DB) error {
		return DB.Model(&models.Video{}).Where("id=?", id).Update("status", status).Error
	})
}

// GetVideoList todo 查询最近七天发布的视频
func GetVideoList(timeData string) ([]*models.Video, error) {
	var VideoList []*models.Video

	//todo 查询
	return VideoList, models.InitMysql(func(DB *gorm.DB) error {
		res := DB.Where("updated_at>?", timeData).Find(&VideoList)
		if res.RowsAffected == 0 {
			return errors.New("无数据")
		}
		return nil
	})
}

// MysqlEs todo 数据同步
func MysqlEs(index string) error {
	//todo 查询mysql
	var VideoList []models.Video
	err := models.InitMysql(func(DB *gorm.DB) error {
		res := DB.Find(&VideoList)
		if res.RowsAffected == 0 {
			return errors.New("无数据")
		}
		return nil
	})
	if err != nil {
		return err
	}
	//todo 循环添加es
	for _, v := range VideoList {
		_, err = AddEsVideo(index, v)
		if err != nil {
			return err
		}
	}
	return nil
}

// GetVideoInfo todo 查询笔记表
func GetVideoInfo(id int) (*models.Video, error) {
	video := new(models.Video)
	return video, models.InitMysql(func(DB *gorm.DB) error {
		res := DB.Where("id=?", id).First(&video)
		if res.RowsAffected == 0 {
			return errors.New("无数据")
		}
		return nil
	})
}

// SaveVideo todo 保存修改后的评论量
func SaveVideo(video models.Video) error {
	return models.InitMysql(func(DB *gorm.DB) error {
		return DB.Model(&models.Video{}).Update("comment_count", video.CommentCount).Error
	})
}
